package com.example.springboot.service.impl;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.springboot.entity.Comment;
import com.example.springboot.mapper.CommentMapper;
import com.example.springboot.service.ICommentService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Service
public class CommentServiceImpl extends ServiceImpl<CommentMapper, Comment> implements ICommentService {

    @Resource
    CommentMapper commentMapper;

    @Override
    public List<Comment> findCommentDetail(Integer channelId) {
            //        与user表链接把所有数据查出来
            List<Comment> articleComments = commentMapper.findCommentDetail(channelId);

            // 把第一层查找出来,查询评论(不包括回复)
            /**没有pid与 OriginId 就是一级评论， pid也就是你回复用户的评论id, OriginId也就是在一级评论的id*/
            List<Comment> originList = articleComments.stream().filter(comment -> comment.getOriginId() == null)
                    .collect(Collectors.toList());

//    遍历所有评论内容 ,设置评论数据的子节点，也就是回复内容
            for (Comment origin : originList) {
//            表示回复的对象集合
                List<Comment> comments = articleComments.stream().filter(comment -> origin.getId().
                        equals(comment.getOriginId())).collect(Collectors.toList());

                comments.forEach(comment -> {
                    // 找到父级评论的用户id和用户昵称，并设置给当前的回复对象
                    Optional<Comment> pComment = articleComments.stream().filter(c1 -> c1.getId().equals(comment.getPid()))
                            .findFirst(); // 找到当前评论的父级

                    pComment.ifPresent(v -> {
//                    pUserId 与 pNickname 也就是被回复人的 userid与nickname
                        comment.setPUserId(v.getUserid());
                        comment.setPNickname(v.getNickname());
                    });
                });
                origin.setChildren(comments);
            }
            return originList;
    }

//    // 设置 menu 的 子菜单
//    @Override
//    public List<Comment> findComments(Integer channelId) {
//        QueryWrapper<Comment> queryWrapper = new QueryWrapper<>();
////        如果 name不为空
//        if (channelId != null) {
//            queryWrapper.eq("channel_id", channelId);
//        }
//        //查询所有数据
//        List<Comment> list = list(queryWrapper);
//        //找出pid为null的一级菜单
//        List<Comment> parentNodes = list.stream().filter(comment -> comment.getPid() == null).collect(Collectors.toList());
//        //找出一级菜单的子菜单
//        for (Comment comment : parentNodes) {
//            // 筛选所有数据在pid = 父级id的数据就是二级菜单
//            comment.setChildren(list.stream().filter(c -> comment.getId().equals(c.getPid())).collect(Collectors.toList()));
//        }
//        return parentNodes;
//    }


}
